home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / manchest.lha / MANCHESTER / manchester / 2.2 / Tracer.st < prev    next >
Text File  |  1993-07-24  |  3KB  |  101 lines

  1. "    NAME        Tracer
  2.     AUTHOR        ikp@cs.man.ac.uk
  3.     FUNCTION displays msg-sends to a particular object 
  4.     ST-VERSIONS    2.2
  5.     PREREQUISITES     
  6.     CONFLICTS    
  7.     DISTRIBUTION      world
  8.     VERSION        1.1
  9.     DATE    22 Jan 1989
  10. SUMMARY    Tracer
  11.     is a simple tracing mechanism which displays message sends to
  12.    an object, and the results returned.(2.2). IKP
  13. "!
  14. 'From Smalltalk-80, Version 2.2 of July 4, 1987 on 18 December 1987 at 7:48:44 am'!
  15.  
  16. Object subclass: #Tracer
  17.     instanceVariableNames: 'object recorder '
  18.     classVariableNames: ''
  19.     poolDictionaries: ''
  20.     category: 'Interface-Debugger'!
  21.  
  22.  
  23. !Tracer methodsFor: 'message handling'!
  24.  
  25. doesNotUnderstand: aMessage 
  26.     "trace the selector then pass the message on"
  27.  
  28.     | result |
  29.     recorder nextPutAll: object class printString; nextPutAll: '['; nextPutAll: aMessage selector asString.
  30.     aMessage arguments size = 0
  31.         ifTrue: 
  32.             [result _ object perform: aMessage selector]
  33.         ifFalse: 
  34.             [recorder nextPutAll: aMessage arguments printString.
  35.             result _ object perform: aMessage selector withArguments: aMessage arguments].
  36.     recorder nextPutAll: ']^'; nextPutAll: result printString; cr.
  37.     recorder class == TextCollector ifTrue: [recorder endEntry].
  38.     ^result! !
  39.  
  40. !Tracer methodsFor: 'accessing'!
  41.  
  42. setTracerObjectTo: newObject recordingOn: aStreamOrTranscript
  43.     "change the object which I trace, and the stream I record on. Hopefully a suitably obscure selector!!"
  44.  
  45.     object _ newObject.
  46.     recorder _ aStreamOrTranscript! !
  47. "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
  48.  
  49. Tracer class
  50.     instanceVariableNames: ''!
  51.  
  52.  
  53. !Tracer class methodsFor: 'class initialization'!
  54.  
  55. initialize
  56.     "Remove my superclass pointer. All messages to me will then generate 'doesNotUnderstand'"
  57.  
  58.     superclass _ nil
  59.  
  60.  
  61.     "Tracer initialize"! !
  62.  
  63. !Tracer class methodsFor: 'instance creation'!
  64.  
  65. on: anObject
  66.     "open a tracer on anObject"
  67.  
  68.     ^self new setTracerObjectTo: anObject recordingOn: Transcript!
  69.  
  70. on: anObject loggedOn: aStream
  71.     "open a tracer on anObject, recording messages on aStream"
  72.  
  73.     ^self new setTracerObjectTo: anObject recordingOn: aStream! !
  74.  
  75. !Tracer class methodsFor: 'examples'!
  76.  
  77. example1
  78.     "demonstrate a simple trace. must have a transcript handy!!"
  79.     "Tracer example1"  "<--- click on `Print It'"
  80.  
  81.     | anArray |
  82.     anArray _ Tracer on: (Array new: 3).
  83.     anArray at: 2 put: 'hello'.
  84.     ^anArray size!
  85.  
  86. example2
  87.     "demonstrate a simple trace, logged on a stream."
  88.     "Tracer example2"  "<--- click on `Print It'"
  89.  
  90.     | anArray aStream |
  91.  
  92.     aStream _ ReadWriteStream on: ''.
  93.  
  94.     anArray _ Tracer on: (Array new: 3) loggedOn: aStream.
  95.     anArray at: 2 put: 'hello'.
  96.     anArray at: 2.
  97.     anArray printString.
  98.     ^aStream contents! !
  99.  
  100. Tracer initialize!
  101.